<?php



//多维数组的排序
$products = array(
	array('tIR','tires',100),
	array('oIL','oil',10),
	array('sPK','spark Plugs',4)
);

$numer_arr = [5,9,7,3,1,8];

$english_arr = ['c','a','b'];



/*
 *一维数组进行升序排序
 例子:
 $numer_arr = [5,9,7,3,1,8];
 usort($numer_arr,'compare_one_arr_sort_num');
*/
function compare_one_arr_sort($a,$b){
	if($a == $b){
		return 0;
	}
	return ($a < $b) ? -1 : 1;
}
uasort($english_arr, 'compare_one_arr_sort');
// print_r($english_arr);


/*
 *一维数组进行降序排序
    例子:
    $numer_arr = [5,9,7,3,1,8];
 	usort($numer_arr, 'compare_one_arr_rsort');
*/
function compare_one_arr_rsort($a,$b){
	if($a == $b){
		return 0;
	}
	return ($a < $b) ? 1 : -1;
}


/*对数字索引的多维数组进行排序【升序】,
	按照字母或者数组,到时候需要排序的话,需要将当前的需要排序的字段
	放在第一个位置,或者对相对应的字段索引进行改变
	例子：
		$products = array(
			array('tIR','tires',100),
			array('oIL','oil',10),
			array('sPK','spark Plugs',4)
		);
		usort($products, 'compare_number_sort');
*/
function compare_number_sort($x,$y){
	if($x[0] == $y[0]){
		return 0;
	}else if($x[0] < $y[0]){
		return -1;
	}else{
		return 1;
	}
}


/*
	对数字索引的多维数组进行排序【降序】,按照字母或者数组
	到时候需要排序的话,需要将当前的需要的字段放在首位,或者对方法中对应的索引进行改变
	需要哪个排序,就改变成哪个字段的数字索引
	例子：
		$products = array(
			array('tIR','tires',100),
			array('oIL','oil',10),
			array('sPK','spark Plugs',4)
		);
		usort($products,'compare_number_rsort');
	*/	
function compare_number_rsort($x,$y){
	if($x[0] == $y[0]){
		return 0;
	}else if($x[0] < $y[0]){
		return 1;
	}else{
		return -1;
	}
}




/*
 *二维数组根据某个字段进行排序【常用】升序
 *如果函数返回的是数值0,1,-1,使用usort()的时候，只需要调用方法名即可   build_sorter
 *如果函数返回的是一个函数,那么使用usort()的时候,调用的方法必须真实调用  build_sorter()
 *例子：冒泡排序法
 *
	 $array = [
		['pr_name' => '西红柿', 'pr_code' => 774550],
		['pr_name' => '黄瓜', 'pr_code' => 774551],
		['pr_name' => '李小龙', 'pr_code' => 774552],
		['pr_name' => '咸鸭蛋', 'pr_code' => 774553],
		['pr_name' => '炒鸡蛋', 'pr_code' => 774554],
		['pr_name' => '黄瓜', 'pr_code' => 774551],
		['pr_name' => '黄瓜', 'pr_code' => 774551]
	];
	usort($array, build_sorter('pr_code'));
*/
function build_sorter($key) {
    return function ($a, $b) use ($key) {
        return strnatcmp($a[$key], $b[$key]);
    };
}

























